// 导航守卫
import router from '@/router'
import Store from '@/store'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 前置守卫
// 白名单
// const whitePath = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // 进度条
  Nprogress.start()
  if (Store.state.user.token) {
    // 如果有token要去登录页
    // 注意将大写转为小写
    if (to.path.toLocaleLowerCase() === '/login') {
      // 跳转到首页
      next('/')
    } else {
      // 没有token 有用户数据就可以实现跳转
      // 通过用户数据里面的id来进行判断是否有用户数据
      if (Store.state.user.userInfo.userId) {
        // 有用户数据就放行
        next()
      } else {
        // 没有就发送请求拿到用户数据
        await Store.dispatch('user/getUserInfo')
        // 在获取用户信息后添加了路由通过addRoutes添加的，通过addRoutes添加的路由
        // 特点：不能立马使用，需要再经过一次导航守卫
        next(to.fullPath)
      }
    }
  } else {
    // 如果有没有token 可以跳转去白名单里面的地址
    // 注意将大写转为小写
    // includes用于搜索筛选关键字 如果输入的地址值是白名单里面的地址正常放行
    // 还可以通过路由源
    // if (whitePath.includes(to.path.toLocaleLowerCase())) {
    if (to.meta.noLogin) {
      next()
    } else {
      // 不是白名单的地址就跳转到登录页
      // 带上完整的登录地址
      // 下次登录直接跳转到上次退出的页面
      next('/login?redirect=' + to.fullPath)
    }
  }
  Nprogress.done()
})
// 后置守卫
// 不是每个路由都会经过后置守卫
router.afterEach((route) => {
  Nprogress.done()
})
